2 #ifndef FrameLib_THREADING_H 3 #define FrameLib_THREADING_H 7 #include <libkern/OSAtomic.h> 9 #include <mach/semaphore.h> 10 #include <mach/task.h> 16 static inline int32_t increment32(
Atomic32 *a) {
return OSAtomicIncrement32Barrier(a); }
17 static inline int32_t decrement32(
Atomic32 *a) {
return OSAtomicDecrement32Barrier(a); }
18 static inline int32_t add32(
Atomic32 *a, int32_t b) {
return OSAtomicAdd32Barrier(b, a); }
19 static inline bool compareAndSwap32(
Atomic32 *loc, int32_t comp, int32_t exch) {
return OSAtomicCompareAndSwap32Barrier(comp, exch, loc); }
23 static inline bool compareAndSwapPtr(
AtomicPtr *loc,
void *comp,
void *exch) {
return OSAtomicCompareAndSwapPtrBarrier(comp, exch, loc); }
24 static inline void *swapPtr(
AtomicPtr *loc,
void *swap)
28 while (!compareAndSwapPtr(loc, ptr, swap))
46 static inline long increment32(Atomic32 *a) {
return InterlockedIncrement(a); }
47 static inline long decrement32(Atomic32 *a) {
return InterlockedDecrement(a); }
48 static inline long add32(Atomic32 *a,
long b) {
return InterlockedAdd(a, b); }
49 static inline bool compareAndSwap32(Atomic32 *loc,
long comp,
long exch) {
return InterlockedCompareExchange(loc, exch, comp) == comp; }
53 static inline bool compareAndSwapPtr(AtomicPtr *loc,
void *comp,
void *exch) {
return InterlockedCompareExchangePointer(loc, exch, comp) == comp; }
54 static inline void *swapPtr(AtomicPtr *loc,
void *swap) {
return InterlockedExchangePointer(loc, swap); }
72 bool compareAndSwap(int32_t comparand, int32_t exchange) {
return compareAndSwap32(&mValue, comparand, exchange); }
80 int32_t
operator += (
const int32_t& a) {
return add32(&mValue, a); }
107 bool compareAndSwap(T *comparand, T *exchange) {
return compareAndSwapPtr(&mValue, comparand, exchange); }
108 T *
swap(T *exchange) {
return (T *) swapPtr(&mValue, exchange); }
132 bool attempt() {
return mAtomicLock.compareAndSwap(0, 1); }
134 void release() { mAtomicLock.compareAndSwap(1, 0); }
175 typedef void ThreadFunctionType(
void *);
179 enum PriorityLevel {kLowPriority, kMediumPriority, kHighPriority, kAudioPriority};
182 : mInternal(NULL), mPriority(priority), mThreadFunction(threadFunction), mArg(arg), mValid(false)
200 void call() { mThreadFunction(mArg); }
204 OSThreadType mInternal;
206 ThreadFunctionType *mThreadFunction;
235 OSSemaphoreType mInternal;
268 static void threadEntry(
void *thread);
269 void threadClassEntry();
273 virtual void doTask() = 0;
314 static void threadEntry(
void *thread);
315 void threadClassEntry();
319 virtual void doTask() = 0;
HANDLE OSSemaphoreType
Definition: FrameLib_Threading.h:57
int32_t operator++()
Definition: FrameLib_Threading.h:82
T * swap(T *exchange)
Definition: FrameLib_Threading.h:108
Definition: FrameLib_Threading.h:64
Definition: FrameLib_Threading.h:100
Definition: FrameLib_Threading.h:124
void signal()
Definition: FrameLib_Threading.h:257
int32_t operator--()
Definition: FrameLib_Threading.h:84
void start()
Definition: FrameLib_Threading.h:294
void start()
Definition: FrameLib_Threading.h:252
bool compareAndSwap(T *comparand, T *exchange)
Definition: FrameLib_Threading.h:107
Definition: FrameLib_Threading.h:172
FrameLib_SpinLockHold(FrameLib_SpinLock *lock)
Definition: FrameLib_Threading.h:154
bool attempt()
Definition: FrameLib_Threading.h:132
TriggerableThread(Thread::PriorityLevel priority)
Definition: FrameLib_Threading.h:247
virtual ~DelegateThread()
Definition: FrameLib_Threading.h:290
~FrameLib_SpinLockHold()
Definition: FrameLib_Threading.h:155
DWORD WINAPI OSThreadFunctionType(LPVOID arg)
Definition: FrameLib_Threading.h:58
Definition: FrameLib_Threading.h:149
T * clear()
Definition: FrameLib_Threading.h:109
Definition: FrameLib_Threading.h:284
FrameLib_Atomic32(int32_t value)
Definition: FrameLib_Threading.h:69
bool compareAndSwap(int32_t comparand, int32_t exchange)
Definition: FrameLib_Threading.h:72
HANDLE OSThreadType
Definition: FrameLib_Threading.h:56
Definition: FrameLib_Threading.h:242
void release()
Definition: FrameLib_Threading.h:134
FrameLib_Atomic32()
Definition: FrameLib_Threading.h:70
Definition: FrameLib_Threading.h:214
virtual ~TriggerableThread()
Definition: FrameLib_Threading.h:248
volatile PVOID AtomicPtr
Definition: FrameLib_Threading.h:51
volatile long Atomic32
Definition: FrameLib_Threading.h:44
int32_t operator+=(const int32_t &a)
Definition: FrameLib_Threading.h:80
FrameLib_AtomicPtr()
Definition: FrameLib_Threading.h:105
int32_t operator=(const int32_t value)
Definition: FrameLib_Threading.h:74
FrameLib_SpinLock()
Definition: FrameLib_Threading.h:129
~FrameLib_SpinLock()
Definition: FrameLib_Threading.h:130
int32_t operator++(int)
Definition: FrameLib_Threading.h:83
void acquire()
Definition: FrameLib_Threading.h:133
int32_t operator--(int)
Definition: FrameLib_Threading.h:85
void destroy()
Definition: FrameLib_Threading.h:157
Thread(PriorityLevel priority, ThreadFunctionType *threadFunction, void *arg)
Definition: FrameLib_Threading.h:181
void start()
Definition: FrameLib_Threading.cpp:120
DelegateThread(Thread::PriorityLevel priority)
Definition: FrameLib_Threading.h:289
PriorityLevel
Definition: FrameLib_Threading.h:179